VSCode 拡張でRuby LSP 入れてみたらRubocopの自動整形処理が早すぎて声出た
2024/4/18
VSCode で Rubocop を自動整形してくれる拡張ツールとして RuboCop (https://marketplace.visualstudio.com/items?itemName=rubocop.vscode-rubocop) を使ってたんだけどたまに起動しなくなって自動整形できない時がちょくちょくあってつらい……となり別のやつを使おうと思った
とりあえず似たような感じの rubocop-ruby(https://marketplace.visualstudio.com/items?itemName=misogi.ruby-rubocop) を試しに使ってみた
とりあえず何度かVSCode再起動して安定して起動できることは確認
しかし、自動整形までに3秒程度のタイムラグがあってちょっと体験が微妙で他のやつを見てみるか……となる
Ruby LSP (https://marketplace.visualstudio.com/items?itemName=Shopify.ruby-lsp) を発見する
https://github.com/Shopify/ruby-lsp
公式で紹介されてる機能(Googleで日本語翻訳したやつ)
セマンティックの強調表示
シンボル検索とコード概要
RuboCop のエラーと警告 (診断)
保存時のフォーマット (RuboCop または構文ツリーを使用)
タイプに応じたフォーマット
デバッグサポート
VS Code の UI を使用したテストの実行とデバッグ
クラス、モジュール、定数、および必要なファイルの定義に移動します
クラス、モジュール、定数のマウスオーバー時のドキュメントの表示
クラス、モジュール、定数、および必須パスの補完
プロジェクト内の任意の場所にあるクラス、モジュール、および定数およびその依存関係 (ワークスペース シンボル) をあいまい検索します。
エディタにほしい機能を一通り揃えてくれてる君である
RWC でもこれに関わってた方が表彰されてたなという記憶があるし、トレンドなやつだったのを思い出してきた
試しに Twitter のフォロワー内検索でLSPについて調べてみるとそこそこ言及があったしコードリーディング会が開かれようとしていた
https://rubygems-code-reading.connpass.com/event/315350/
Shopify/ruby-lsp で快適な Ruby 生活を始めよう / introduction-shopify-ruby-lsp - Speaker Deck https://speakerdeck.com/igsr5/introduction-shopify-ruby-lsp
LSP(Language Server Protocol) ってそもそも何?ってところから説明してくれてる
優れているところ・今はあともう一歩なところもまとめてくれてるのもありがたい
https://shopify.engineering/improving-the-developer-experience-with-ruby-lsp
Shopify 公式の Ruby LSP解説記事
話は戻るが、さっそく拡張をインストールしてみた
Rubocop の 自動整形実行が早すぎて「え、はやいんだけど!!!!」って声が出るレベルだった
体感1秒いかないくらい?
なんでもっと早く使わなかったんだ
なんで早いかは Code indexing の仕組みによって成り立っている模様(先ほどのスライドを読んで知った)
RubyKaigi2023 で発表されてたわ……(まだ読めてない)
https://speakerdeck.com/vinistock/code-indexing-how-language-servers-understand-our-code
RubyKaigi2024でも開発者の方が発表されるっぽい
https://rubykaigi.org/2024/presentations/vinistock.html#day3
定義元ジャンプ、先ほどのスライドで見た通り一部は使えないけどなるほどこういう感じねとなっておもしろい
エディタより GitHub で定義元調べる方が割とやりがちではある
コード探索というと RubyMine のイメージがある。触ったことないのでどういう使い心地なのかはちょい気になる
追記
LSP初見みたいな書き方をしてたけど、最初に使ってた Rubocop 拡張にも LSP は入ってはいたのだった(2023/5~の話)。確かに処理の遅さが気になることはなかったなとなってる
https://koic.hatenablog.com/entry/rubocop-lsp
最初にも書いたけど、環境変わってないのになぜか起動しなくなる時があって別の使おうかな……というのが発端
起動しない理由は自分の調査不足な気もするのでまた調べてみる
今まで使われてた Ruby(rebornix.ruby https://marketplace.visualstudio.com/items?itemName=rebornix )という拡張が2023年あたりで非推奨になって、その代わりに Ruby LSP が推奨乗り換え先となった流れがある模様
https://github.com/rubyide/vscode-ruby
Shopify's ruby-lsp and associated vscode-ruby-lsp are recommended alternatives to this extension. It is substantially easier to produce a high-quality LSP implementation using Ruby itself vs relying on another language such as TypeScript.
In addition, sponsorship of a project by a company like Shopify could help to ensure a high-quality developer experience going forward. Even with multiple people helping on this project, keeping up with Microsoft's development of VSCode plus the wide array of Ruby community tooling is a tall undertaking.
As of 4/2/2023, the VSCode extensions are not marked deprecated. They will be within the next few weeks.
「Ruby LSP Rubocop 」みたいな感じでググると使ってたRubyのプラグインが非推奨になったんでLSPに移行しました的な記事を書いている人が複数いる
Rubocop拡張だけ使いたければ最初に出てた Rubocop で良いという感じにもなる気がするし、その他のコード探索とかデバッグサポートもLSPでやりたければ Ruby LSP拡張入れる感じかなと思った
↑LSP初心者な意見なので、いやいやそういうシンプルな話でもないんすよ的な感じなやつだったら Twitter とかで突っ込んでくれるとうれしいです
とりあえず Ruby LSP でしばらくやってみようと思う